package com.sch.www.common.util.cryptogram;

import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;

/**
 * Created by Administrator on 2017/11/18.
 */
public class HexUtil {


    /**
     * 将一个字节数组转换为一个字符串，表示每个字节的十六进制值依次排列。
     * 返回的字符串将是传递数组长度的两倍，因为它需要两个字符来表示任何给定的字节。
     *
     * @param data
     * @return
     */
    public static String encodeHexString(byte[] data) {
        return Hex.encodeHexString(data);
    }

    /**
     * 将一个字节数组转换为一个字符数组，每个字节按顺序表示十六进制值。
     * 返回的数组将是传递数组长度的两倍，因为它需要两个字符来表示任何给定的字节。
     *
     * @param data
     * @return
     */
    public char[] encodeHex(byte[] data) {
        return Hex.encodeHex(data);
    }



    /**
     * 将表示十六进制值的字符数组转换为这些相同值的字节数组。
     * 返回的数组将是传递数组长度的一半，因为它需要两个字符来表示任何给定的字节。
     * 如果传递的char数组有奇数个元素，就会引发异常。
     *
     * @param data
     * @return
     * @throws DecoderException
     */
    public static byte[] decodeHex(char[] data) throws DecoderException {
        return Hex.decodeHex(data);
    }

    /**
     * 将表示字符数组为这些相同值的字节数组。
     * @param data
     * @return
     * @throws DecoderException
     */
    public static byte[] decodeHex(String data) throws DecoderException {
        return  decodeHex(data.toCharArray());
    }



    public static void main(String[] args) throws Exception {
        String a="将一个字节数组转换为一个字符串，表示每个字节的十六进制值依次排列。";
        System.out.println( new String (  decodeHex(encodeHexString(a.getBytes())) ) );


    }

}
